#include "reine.h"

#include "partie.h"

GLint Reine::lid = 0;

GLint Reine::getLid() {
    return lid;
}

void Reine::calculDeplacements(bool suppr_echecs) {
    ajouterCoup(suppr_echecs, x,y,CASE_ACTUELLE);

    int i, j;

    // En haut
    i = x;
    j = y+1;
    while (j <= 7 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        j++;
    }
    if (j <= 7 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // En bas
    i = x;
    j = y-1;
    while (j >= 0 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        j--;
    }
    if (j >= 0 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // A droite
    i = x+1;
    j = y;
    while (i <= 7 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i++;
    }
    if (i <= 7 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // A gauche
    i = x-1;
    j = y;
    while (i >= 0 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i--;
    }
    if (i >= 0 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }

    // En haut à droite
    i = x+1;
    j = y+1;
    while (i <= 7 && j <= 7 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i++;
        j++;
    }
    if (i <= 7 && j <= 7 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // En haut à gauche
    i = x-1;
    j = y+1;
    while ( i >= 0 && j <= 7 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i--;
        j++;
    }
    if (i >= 0 && j <= 7 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // En bas à droite
    i = x+1;
    j = y-1;
    while ( i <= 7 && j >= 0 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i++;
        j--;
    }
    if (i <= 7 && j >= 0 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
    // En bas à gauche
    i = x-1;
    j = y-1;
    while ( i >= 0 && j >= 0 && parent->LirePlateau(i,j) == NULL) {
        ajouterCoup(suppr_echecs, i,j,DEPLACEMENT);
        i--;
        j--;
    }
    if (i >= 0 && j >= 0 && parent->LirePlateau(i,j)->getCouleur() != this->couleur) {  // Si on s'est arrêté sur une pièce adverse
        ajouterCoup(suppr_echecs, i,j,CAPTURE);
    }
}
